package errorx

import "algo-sdk-go/common/constant"

var (
	InternalServerErr     = NewCodeError(constant.InternalServerErrorCode, constant.InternalServerErrorMsg)
	ParamsLostErr         = NewCodeError(constant.ParamsLostCode, constant.ParamsLostMsg)
	ParamsEmptyErr        = NewCodeError(constant.ParamsEmptyCode, constant.ParamsEmptyMsg)
	ParamsNilErr          = NewCodeError(constant.ParamsNilCode, constant.ParamsNilMsg)
	IdEmptyErr            = NewCodeError(constant.IdEmptyCode, constant.IdEmptyMsg)
	CreateAlreadyExistErr = NewCodeError(constant.CreateAlreadyExistCode, constant.CreateAlreadyExistMsg)
	OverMaxQuerySizeErr   = NewCodeError(constant.OverMaxQuerySizeCode, constant.OverMaxQuerySizeMag)
	TimeCastErr           = NewCodeError(constant.TimeCastErrCode, constant.TimeCastErrMsg)
	TimeConfusionErr      = NewCodeError(constant.TimeConfusionCode, constant.TimeConfusionMsg)
	MockErrErr            = NewCodeError(constant.MockErrCode, constant.MockErrMsg)
	CacheEmptyErr         = NewCodeError(constant.CacheEmptyCode, constant.CacheEmptyMsg)
)

// Error Code
const (
	DefaultCode         = 1001
	NotFoundCode        = 404
	InternalServerCode  = 500
	ParamsLostErrorCode = 400
	CacheLostErrorCode  = 401
)

type CodeError struct {
	Code int    `json:"code"`
	Msg  string `json:"msg"`
}

func (e *CodeError) Error() string {
	return e.Msg
}

func NewCodeError(code int, msg string) error {
	return &CodeError{Code: code, Msg: msg}
}
